# 题目一：用类实现如下要求
# （1）编写一个学生类，要求每个学生有单独的学号，并且学号自动生成，如：20200901001，20200901002……
# （2）每个学生必须有学号和姓名属性，并且初始化后是不能修改的。
# （3）提供方法能打印现在班级的所有学号
# （4）每个学生实例在删除时，自动在班级中移除学号
# class Student(object):
#     __stu_list=[]
#     __id=20200901001
#     addr = '成都'
#
#     @staticmethod
#     def all_id():
#         print(f'所有学号：{Student.__stu_list}')
#
#     def __init__(self,name):
#         self.name=name
#         self.id=Student.__id
#         Student.__id += 1
#         Student.__stu_list.append(self.id)
#
#     def __del__(self):
#         Student.__stu_list.remove(self.id)
#         print(f'所有学号：{Student.__stu_list}')
#
#
# s1=Student('zhangsan')
# s1.all_id()
# print(s1.name,s1.id)


#
# 题目二：
# 有一个文件file.txt记录了三国人物的名字和年龄,请写一个程序将其中 30岁以上和以下的人分别打印出来，类似这样：
# 大于等于30岁的人有：刘备，赵云，张飞，关羽
# 小于30岁的人有：诸葛亮，刘琦
# import csv
# with open('file.txt',mode='r',encoding='utf8') as f:
#     read=csv.reader(f,delimiter=',')
#     r=list(read)
# print(r)
# a=[]
# b=[]
# for i in r:
#     if int(i[1]) >= 30:
#         a.append(i[0])
#     else:
#         b.append(i[0])
#
# print(a,b)

# import CsY
# with open( "fil.e.txt."."o" ..encoding="utf-8") as f:
# csv ..readen=csv.reader(f)+
# file data=list(Csv reader)+
# more_tan_3o=[i[] for i in fi.le..data if int(i[1])>=30]+less_tan_3o=[i[0]for i in fi.le.data if int(i[1])<30]+
# print("大于等于30岁的人有:",", ".join(more_tan_30) ) +print("小于30岁的人有:".", ".join(less tan 30))J



#
# 题目三：
# 【1】定义一个学生Student类。有下面的属性：
#  姓名 name , 年龄 age , 成绩 score（语文，数学，英语) [每课成绩的类型为整数]
#  方法：
#     1 获取学生的姓名：get_name() 返回类型:str
#     2 获取学生的年龄：get_age() 返回类型:int
#     3 返回3门科目中最高的分数。get_max_score() 返回类型:int
# class Student(object):
#
#     def __init__(self,name,age,score):
#         self.name=name
#         self.age=age
#         self.score=score
#
#     def get_name(self):
#         print(f'学生姓名：{self.name}')
#     def get_age(self):
#         print(f'学生年龄：{self.age}')
#     def get_max_score(self):
#         print(f'最高分数为：{max(self.score)}')
#
# score={'语文':88,'数学':99,'英语':77}
# score=(88,99,77)
# s=Student('zhangsan',22,score)
# s.get_name()
# s.get_age()
# s.get_max_score()


#
# 【2】定义一个字典类：dictclass。完成下面的功能：
#     dict = dictclass({你需要操作的字典对象})
#     1 删除某个key
#         del_key(key)
#     2 判断某个键是否在字典里，如果在返回键对应的值，不存在则返回"not found"
#         get_value_from_key(key)
#     3 返回键组成的列表：返回类型;(list)
#         get_keys()
#     4 合并字典，返回三元组。第一个表示合并后的字典{key:value}，第二个表示更新了那些{key:value}，第三个表示新增了那些{key：value}
#         update_dict({要合并的字典})
# class Dictclass(object):
#     def __init__(self,d):
#         self.dict=d
#
#     def del_key(self,key):
#         del self.dict[key]
#
#     def get_value_from_key(self,key):
#         if key in self.dict:
#             print(self.dict[key])
#         else:
#             print('not found')
#
#     def get_keys(self):
#         key_list=[i for i in self.dict]
#         print(key_list)
#
#     def update_dict(self,d2):
#         self.__list=[]
#         self.__addlist=[]
#
#         for i in d2:
#             if i in self.dict:
#                 self.__list.append({i:d2[i]})
#             if i not in self.dict:
#                 self.__addlist.append({i:d2[i]})
#         self.dict.update(d2)
#         self.__alist=[{j:self.dict[j]} for j in self.dict]
#
#         print(f'合并后的字典:{tuple(self.__alist)}')
#         print(f'更新了:{tuple(self.__list)}')
#         print(f'新增了:{tuple(self.__addlist)}')
#
# dict=Dictclass({1:2,2:3,3:4,4:5})
# dict.get_value_from_key(5)
# dict.get_value_from_key(4)
# dict.get_keys()
# dict.update_dict({1:9,5:6,4:7})



class DictClass(object):
    def __init__(self, dic):
        self.dic = dic

    def del_key(self, key):
        self.dic.pop(key)
        return self.dic

    def get_value_from_key(self, key):
        if key in self.dic:
            return self.dic[key]
        else:
            return "not found"

    def get_keys(self):
        return list(self.dic.keys())

    def update_dict(self, new_dic):
        """合并字典，返回三元组。第一个表示合并后的字典{key:value}，第二个表示更新了那些{key:value}，第三个表示新增了那些{key：value}"""
        update_key_value = {}  # 用于存更新的key-value
        add_key_value = {}  # 用于存方法新加的key-value
        for new_key in new_dic:  # 拿到所有的新字典的key
            if new_key in self.dic:
                # self.dic[new_key] = new_dic[new_key]  # 更新
                update_key_value[new_key] = new_dic[new_key]  # 添加更新的内容到 update_key_value字典中
            else:
                # self.dic[new_key] = new_dic[new_key]  # 添加
                add_key_value[new_key] = new_dic[new_key]  # 添加新增的内容到 add_key_value 字典中。
            self.dic[new_key] = new_dic[new_key]  # 添加 或 更新 原字典
        return self.dic, update_key_value, add_key_value


if __name__ == '__main__':
    testdic={"a":1,"b":2,"c":3}

    mydict=DictClass(testdic)

    print(mydict.del_key("a"))
    print(mydict.get_value_from_key("b"))
    print(mydict.get_keys())
    nd={"d":4,"e":5,"b":99999}
    print(mydict.update_dict(nd))



